\documentclass{article}
\usepackage{ctex}
\usepackage{geometry}
\usepackage{ragged2e}
\usepackage{graphicx}
\usepackage{enumerate}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
  basicstyle=\ttfamily\small,    % 等宽字体
  numbers=left,                   % 显示行号
  numberstyle=\tiny\color{gray},  % 行号样式
  frame=single,                   % 边框样式
  breaklines=true,                % 自动换行
  keywordstyle=\color{blue},      % 关键字颜色
  commentstyle=\color{green!40!black}, % 注释颜色
  stringstyle=\color{red}         % 字符串颜色
}
\geometry{a4paper,scale=0.7}
\title{LCD与TWI实验报告}
\author{赵俊宇 PB24061271}
\date{2025.4.6}


\begin{document}
\maketitle
\tableofcontents
\section{LCD编程}
由于LCD和TWI头文件已经给好,这里可以直接初始化,再调用封装好的代码.
初始化主要有以下步骤:
\begin{enumerate}
    \item 进入四位接口模式
    \item 设置显示和点数并发送
    \item 设置光标显示等
    \item 清屏
\end{enumerate}
\begin{lstlisting}[language=C]
    while (1)
	{
		LCD_Write_String(0,3,"Zhaojunyu");
		LCD_Write_String(1,3,"PB24061271");
	}
\end{lstlisting}
\section{TWI设置}
这里使用MT与SR实现两块板子之间的数据传输.
MT可以概括为:
\begin{enumerate}
  \item 初始设置
  \item 开启TWI
  \item 发送start并等待
  \item 发送地址并等待
  \item 发送数据并等待
  \item 关闭TWI
\end{enumerate}

其中,每发送一次数据都要用代码清除一次标志

SR可以概括为:
\begin{enumerate}
  \item 初始设置
  \item 开启TWI
  \item 等待并接收地址
  \item 等待并接收数据
  \item 存储数据
  \item 关闭TWI
\end{enumerate}

通过两块板子间while循环,我们可以传输数据.

\section{TWI接口占用问题}
从设备的TWI既要接收数据,也要向LCD发送数据,这就造成了主设备发送过于频繁,
从设备无法按时处理的通信错误.

为了解决此问题,我们可以使用延时,降低主设备发送频率,从而实现正确通信.

或者,我们可以将主设备的某个管脚设置为输入,从设备某个管脚设置为输出,使用导线将他们连接起来,当从设备处理TWI时,
输出高电平,主设备被输入高电平后结束等待,也进行TWI接口的代码.在结束后,从设备输出低电平,主设备进入while循环等待.

这样,我们就从硬件角度解决了这个问题.
\end{document}